import Vue from 'vue'
import App from './App'

// 全局挂载引入网络请求框架
import http from '@/common/api/http.js'
Vue.prototype.$http = http

// 引入系统全局配置工具
import appConfig from '@/common/app-config.js';
Vue.prototype.$appConfig = appConfig

// 引入用户数据
import appUser from '@/common/app-user.js';
Vue.prototype.$appUser = appUser


Vue.config.productionTip = false

// 统一提示
const msg = (title, duration = 1500, mask = false, icon = 'none') => {
	if (Boolean(title) === false) {
		return;
	}
	if (!title) {
		return;
	}
	uni.showToast({
		title,
		duration,
		mask,
		icon
	});
}
Vue.prototype.$api = {
	msg
};

App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()

Vue.prototype.$showLoadingView = function(title = '加载中...', mask = true) {
	uni.showLoading({
		title: title,
		mask: mask
	})
}

// 权限验证跳转
Vue.prototype.$navTo = function(url, type = "navigateTo", NoCheck = false) {
	// 跳转
	let options = {
		url: url,
		animationType: 'pop-in',
		animationDuration: 300,
		success: res => {}
	}
	switch (type) {
		case "navigateTo":
			//保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面。
			uni.navigateTo(options);
			break;
		case "redirectTo":
			//关闭当前页面，跳转到应用内的某个页面
			uni.redirectTo(options);
			break;
		case "reLaunch":
			//关闭所有页面，打开到应用内的某个页面
			uni.reLaunch(options);
			break;
		case "switchTab":
			//跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。
			uni.switchTab(options);
			break;
	}
}

/**
 * 检查是否有登录,没登录的话直接跳转登录页
 * this.$isLogin();
 */
Vue.prototype.$isLogin = function(type = "navigateTo") {
	let loginStatus = tslmUser.isLogin();
	if (!loginStatus) {
		this.$navTo(`/pages/login/login`, type);
	}
	return loginStatus;
}

/**
 * 普通模式网络请求数据处理公共方法
 * 
 * @param {ArrayList} dataList 
 * @param {Object} requestRes
 * @param {mescroll} mescroll
 */
Vue.prototype.$requestAnalysis = function(dataList, requestRes, mescroll) {
	// 接口返回的当前页数据列表 (数组)
	let curPageData = requestRes;
	// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
	let curPageLen = curPageData.length;
	//设置列表数据
	if (mescroll.num == 1) {
		//如果是第一页需手动置空列表
		dataList = []
	}
	dataList = dataList.concat(curPageData); //追加新数据

	// 请求成功,隐藏加载状态
	//方法一(推荐): 后台接口有返回列表的总页数 totalPage
	// this.mescroll.endByPage(curPageLen, pageCount);

	//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
	// this.mescroll.endBySize(curPageLen, totalSize);

	//方法三(推荐): 您有其他方式知道是否有下一页 hasNext
	let hasNext = false
	mescroll.endSuccess(curPageLen, hasNext);
	return dataList
}

/**
 * 分页模式网络请求数据处理公共方法
 * 
 * @param {ArrayList} dataList 
 * @param {Object} requestRes
 * @param {mescroll} mescroll
 */
Vue.prototype.$requestPageAnalysis = function(dataList, requestRes, mescroll) {
	//当前页数
	let curPage = requestRes.curPage;
	//总页数
	let pageCount = requestRes.pageCount;
	//每页最多返回数量
	let size = requestRes.size;
	// 接口返回的当前页数据列表 (数组)
	let curPageData = requestRes.datas;
	//总条数
	let totalSize = requestRes.total;
	// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
	let curPageLen = curPageData.length;
	//设置列表数据
	if (mescroll.num == 1) {
		//如果是第一页需手动置空列表
		dataList = []
	}
	dataList = dataList.concat(curPageData); //追加新数据

	// 请求成功,隐藏加载状态
	//方法一(推荐): 后台接口有返回列表的总页数 totalPage
	// this.mescroll.endByPage(curPageLen, pageCount);

	//方法二(推荐): 后台接口有返回列表的总数据量 totalSize
	// this.mescroll.endBySize(curPageLen, totalSize);

	//方法三(推荐): 您有其他方式知道是否有下一页 hasNext
	let hasNext = curPage < pageCount
	mescroll.endSuccess(curPageLen, hasNext);
	return dataList
}
